//
//  WBStatusListDAL.swift
//  SinaWebo
//
//  Created by 亚杏 on 2017/6/15.
//  Copyright © 2017年 oms. All rights reserved.
//

import Foundation

//DAL - Data Access Layer 数据访问层
// 负责处理数据库和网络数据，给ListViewModel 返回微博的【字典数组】
class WBStatusListDAL {


    /// 从本地数据库或网络加载数据
    /// 参数之所以参照网络接口，就是为了保证对原有代码最小化调整
    /// - Parameters:
    ///   - since_id: 下拉刷新id
    ///   - max_id: 上拉刷新id
    ///   - completion: 完成回调（字典数组，是否成功）
    class func loadStatus(since_id: Int64 = 0, max_id: Int64 = 0, completion: @escaping (_ list: [[String : AnyObject]]?, _ isSuccess: Bool)->()) {

        //0.获取用户代号
        guard let userid = WBNetworkManager.shared.userAccount.uid else {
            return
        }

        //1.检查本地数据，如果有直接返回
       let array = XYXSQLiteManager.shared.loadStatus(userid: userid, since_id: since_id, max_id: max_id)
        //判断数组数量，无数据时返回是空数组
        if array.count > 0 {
            completion(array, true)
            return
        }

        //2.如果没有，加载网络数据
        WBNetworkManager.shared.statusList(since_id: since_id, max_id: max_id) { (list, isSuccess) in
            //判断请求是否成功
            if !isSuccess {
                completion(nil, false)
                return
            }
            //3.加载完成后，将网络数据写入数据库
            guard let list = list else{
                completion(nil, isSuccess)
                return
            }

            XYXSQLiteManager.shared.updateStatus(userId: userid, array: list)

            //4.返回网络数据
            completion(list, isSuccess)
        }
    }
}
